home *** CD-ROM | disk | FTP | other *** search
- From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
- Date: Fri, 18 Feb 94 10:39:48 +0100
- Message-Id: <9402180939.AA05174@issan.informatik.uni-dortmund.de>
- To: mint@atari.archive.umich.edu
- Subject: MiNT 1.10: some optimizations
-
- bios.c:
- - do_bconin: use a separate variable for the return value from ioctl
- so that r can go into a register.
-
- biosfs.c:
- - bios_fscntl, bios_ioctl: use switch instead of if/else if chain
-
- context.spp:
- - restore_context: delete unnessesary branch instruction
-
- file.h:
- - follow_links: make it a special value instead of a static variable,
- since only its address used
-
- filesys.c:
- - follow_links: deleted
- - ext_paths: make it const
-
- intr.spp:
- change `move.w #0,-(sp)' to `clr.w -(sp)' on the 68030, where it is
- faster. Not a big win, though :-)
-
- mem.c:
- - VgetSize, Vsetmode: use trap_14_ww with gcc
-
- pipefs.c:
- - pipe_ioctl: use switch instead of if/else if chain
-
- signal.c:
- - check_sigs: don't mask curproc->sigpending twice
-
- syscall.spp:
- change `move.w #0,-(sp)' into `clr.w -(sp)' and use index scale on the
- 68030
- - call_dosound: save one instruction. Hey, what the heck! :-)
-
- tosfs.c:
- - tos_ioctl: use switch instead of if/else if chain
-
- unifs.c:
- - uni_fscntl: same here
-
- util.c:
- - mth_start: make it const
-
- -------------------- cut here --------------------
- diff -ur orig/bios.c ./bios.c
- --- orig/bios.c Fri Feb 11 19:16:12 1994
- +++ ./bios.c Thu Feb 17 20:51:24 1994
- @@ -723,14 +723,15 @@
- {
- FILEPTR *f;
- long r;
- + long nread;
- unsigned char c;
-
- if (dev < MAX_BHANDLE) {
- f = curproc->handle[binput[dev]];
- if (!f) return 0;
- - r = 0;
- - (void)(*f->dev->ioctl)(f, FIONREAD, &r);
- - if (!r) return WOULDBLOCK; /* data not ready */
- + nread = 0;
- + (void)(*f->dev->ioctl)(f, FIONREAD, &nread);
- + if (!nread) return WOULDBLOCK; /* data not ready */
- if (is_terminal(f))
- r = tty_getchar(f, RAW);
- else {
- diff -ur orig/biosfs.c ./biosfs.c
- --- orig/biosfs.c Fri Feb 11 21:03:02 1994
- +++ ./biosfs.c Thu Feb 17 20:58:18 1994
- @@ -746,7 +746,9 @@
- if (IS_FD_DIR(dir))
- return EACCDN;
-
- - if ((unsigned)cmd == DEV_INSTALL) {
- + switch ((unsigned) cmd) {
- + case DEV_INSTALL:
- + {
- struct dev_descr *d = (struct dev_descr *)arg;
-
- b = kmalloc(SIZEOF(struct bios_file));
- @@ -762,8 +764,9 @@
- set_xattr(&(b->xattr), S_IFCHR|DEFAULT_MODE, UNK_RDEV|devindex);
- devindex = (devindex+1) & 0x00ff;
- return (long)&kernelinfo;
- - }
- - if ((unsigned)cmd == DEV_NEWTTY) {
- + }
- + case DEV_NEWTTY:
- + {
- b = kmalloc(SIZEOF(struct bios_file));
- if (!b) return ENSMEM;
- b->tty = kmalloc(SIZEOF(struct tty));
- @@ -781,8 +784,9 @@
- broot = b;
- set_xattr(&(b->xattr), S_IFCHR|DEFAULT_MODE, BIOS_RDEV|(b->private&0x00ff));
- return 0;
- - }
- - if ((unsigned)cmd == DEV_NEWBIOS) {
- + }
- + case DEV_NEWBIOS:
- + {
- b = kmalloc(SIZEOF(struct bios_file));
- if (!b) return ENSMEM;
- strncpy(b->name, name, BNAME_MAX);
- @@ -795,6 +799,7 @@
- broot = b;
- set_xattr(&(b->xattr), S_IFCHR|DEFAULT_MODE, BIOS_RDEV|(b->private&0x00ff));
- return 0;
- + }
- }
- return EINVFN;
- }
- @@ -1260,19 +1265,21 @@
- int i;
- struct bios_file *b;
-
- - if (mode == FIONREAD) {
- + switch (mode) {
- + case FIONREAD:
- if (bconstat(f->fc.aux))
- *r = 1;
- else
- *r = 0;
- - }
- - else if (mode == FIONWRITE) {
- + break;
- + case FIONWRITE:
- if (bcostat(f->fc.aux))
- *r = 1;
- else
- *r = 0;
- - }
- - else if (mode == TIOCFLUSH) {
- + break;
- + case TIOCFLUSH:
- + {
- int oldmap;
- IOREC_T *ior;
- int flushtype;
- @@ -1320,8 +1327,9 @@
- }
- }
- return 0;
- - }
- - else if (mode == TIOCOUTQ) {
- + }
- + case TIOCOUTQ:
- + {
- int oldmap;
- IOREC_T *ior;
-
- @@ -1343,13 +1351,18 @@
- else
- *r = 0;
- return 0;
- - }
- - else if (mode == TIOCGWINSZ && f->fc.aux == 2) {
- + }
- + case TIOCGWINSZ:
- + if (f->fc.aux != 2)
- + return EINVFN;
- aline = lineA0();
- ws = (struct winsize *)buf;
- ws->ws_row = *((short *)(aline - 42)) + 1;
- ws->ws_col = *((short *)(aline - 44)) + 1;
- - } else if (mode == TIOCIBAUD || mode == TIOCOBAUD) {
- + break;
- + case TIOCIBAUD:
- + case TIOCOBAUD:
- + {
- long oldbaud, newbaud;
- int oldmap;
-
- @@ -1412,7 +1425,10 @@
- if (newbaud > 0 && newbaud != oldbaud)
- return ERANGE;
- return 0;
- - } else if (mode == TIOCCBRK || mode == TIOCSBRK) {
- + }
- + case TIOCCBRK:
- + case TIOCSBRK:
- + {
- unsigned long bits;
-
- dev = f->fc.aux;
- @@ -1429,7 +1445,11 @@
- else
- bits |= 8;
- (void)rsconf(-1, -1, -1, -1, (int)bits, -1);
- - } else if (mode == TIOCGFLAGS || mode == TIOCSFLAGS) {
- + break;
- + }
- + case TIOCGFLAGS:
- + case TIOCSFLAGS:
- + {
- unsigned short oflags, flags, *sgflags;
- unsigned long bits;
- unsigned char ucr;
- @@ -1473,18 +1493,32 @@
- } else {
- return EINVFN;
- }
- - } else if ((mode >= TCURSOFF && mode <= TCURSSTEADY) && (f->fc.aux == 2)) {
- + break;
- + }
- + case TCURSOFF:
- + case TCURSON:
- + case TCURSBLINK:
- + case TCURSSTEADY:
- + if (f->fc.aux != 2)
- + return EINVFN;
- return Cursconf(mode - TCURSOFF, 0);
- - } else if ((mode >= TCURSSRATE && mode <= TCURSGRATE) && (f->fc.aux == 2)) {
- + case TCURSSRATE:
- + case TCURSGRATE:
- + {
- long r;
-
- + if (f->fc.aux != 2)
- + return EINVFN;
- r = Cursconf(mode - TCURSOFF, *((short *)buf));
- if (r >= 0) {
- *(short *)buf = r;
- r = 0;
- }
- return r;
- - } else if (mode == F_SETLK || mode == F_SETLKW) {
- + }
- + case F_SETLK:
- + case F_SETLKW:
- + {
- struct flock *lck = (struct flock *)buf;
-
- b = (struct bios_file *)f->fc.index;
- @@ -1508,7 +1542,10 @@
- b->lockpid = curproc->pid;
- f->flags |= O_LOCK;
- }
- - } else if (mode == F_GETLK) {
- + break;
- + }
- + case F_GETLK:
- + {
- struct flock *lck = (struct flock *)buf;
-
- b = (struct bios_file *)f->fc.index;
- @@ -1519,7 +1556,9 @@
- } else {
- lck->l_type = F_UNLCK;
- }
- - } else {
- + break;
- + }
- + default:
- /* Fcntl will automatically call tty_ioctl to handle
- * terminal calls that we didn't deal with
- */
- diff -ur orig/context.spp ./context.spp
- --- orig/context.spp Tue Feb 1 04:28:18 1994
- +++ ./context.spp Thu Feb 17 19:43:58 1994
- @@ -207,7 +207,6 @@
- sub.w d1,sp
- sub.w d1,sp
- move.l sp,a2
- - bra.s rcover
- subq.w #1,d1 ; correct for first time through loop
- rcint: move.w (a1)+,(a2)+
- rcover: dbf d1,rcint
- diff -ur orig/file.h ./file.h
- --- orig/file.h Tue Feb 15 23:21:30 1994
- +++ ./file.h Thu Feb 17 21:14:30 1994
- @@ -556,7 +556,7 @@
-
- extern FILESYS *drives[NUM_DRIVES];
- extern struct tty default_tty;
- -extern char follow_links[];
- +#define follow_links ((char *)-1L)
- #endif
-
- /* internal bios file structure */
- diff -ur orig/filesys.c ./filesys.c
- --- orig/filesys.c Wed Feb 2 22:43:44 1994
- +++ ./filesys.c Thu Feb 17 20:15:04 1994
- @@ -32,8 +32,6 @@
-
- FILEPTR *flist; /* a list of free file pointers */
-
- -char follow_links[1]; /* dummy "name" used as a parameter to path2cookie */
- -
- /* vector of valid drives, according to GEMDOS */
- /* note that this isn't necessarily the same as what the BIOS thinks of
- * as valid
- @@ -130,7 +128,7 @@
- * load_devdriver() need access to it.
- */
- #define NPATHS 3
- -static const char *ext_paths[NPATHS] = {"", "\\MINT", "\\MULTITOS"};
- +static const char *const ext_paths[NPATHS] = {"", "\\MINT", "\\MULTITOS"};
-
-
- void
- diff -ur orig/intr.spp ./intr.spp
- --- orig/intr.spp Wed Feb 2 17:52:32 1994
- +++ ./intr.spp Thu Feb 17 21:16:32 1994
- @@ -100,7 +100,11 @@
- jsr _build_context ; build context
- move.l _curproc,a0
- move.l (a0),sp ; use curproc->sysstack
- +%ifdef ONLY030
- + clr.w -(sp) ; not a system call
- +%else
- move.w #0,-(sp) ; not a system call
- +%endif
- jsr _enter_kernel ; enter kernel
- addq.w #2,sp
- jsr _preempt ; yield processor
- @@ -270,7 +274,11 @@
- jsr _build_context
- move.l _curproc,a4
- move.l (a4),sp ; put us in the system stack
- +%ifdef ONLY030
- + clr.w -(sp) ; not a GEMDOS call
- +%else
- move.w #0,-(sp) ; not a GEMDOS call
- +%endif
- jsr _enter_kernel ; set up kernel vectors
- addq.w #2,sp
- move.l _sig_routine,a1 ; get signal handling routine
- diff -ur orig/mem.c ./mem.c
- --- orig/mem.c Tue Feb 1 04:31:44 1994
- +++ ./mem.c Thu Feb 17 20:21:08 1994
- @@ -12,10 +12,15 @@
- #include "fasttext.h" /* for line A stuff */
-
- #ifndef VgetSize
- +#ifdef __GNUC__
- +#define VgetSize(mode) (long)trap_14_ww((short)91,(short)(mode))
- +#define Vsetmode(mode) (short)trap_14_ww((short)88,(short)(mode))
- +#else
- extern long xbios();
- #define VgetSize(mode) xbios(91, (short)(mode))
- #define Vsetmode(mode) xbios(88, (short)(mode))
- #endif
- +#endif
-
- static long core_malloc P_((long, int));
- static void core_free P_((long));
- diff -ur orig/pipefs.c ./pipefs.c
- --- orig/pipefs.c Wed Feb 9 23:08:10 1994
- +++ ./pipefs.c Thu Feb 17 21:19:24 1994
- @@ -750,7 +750,8 @@
-
- this = (struct fifo *)f->fc.index;
-
- - if (mode == FIONREAD) {
- + switch (mode) {
- + case FIONREAD:
- p = (f->flags & O_HEAD) ? this->outp : this->inp;
- assert(p != 0);
- if (p->writers <= 0 || p->writers == VIRGIN_PIPE) {
- @@ -763,8 +764,8 @@
- r = r >> 2; /* r /= 4 */
- }
- *((long *) buf) = r;
- - }
- - else if (mode == FIONWRITE) {
- + break;
- + case FIONWRITE:
- p = (f->flags & O_HEAD) ? this->inp : this->outp;
- assert(p != 0);
- if (p->readers <= 0) {
- @@ -777,8 +778,9 @@
- r = r >> 2; /* r /= 4 */
- }
- *((long *) buf) = r;
- - }
- - else if (mode == F_SETLK || mode == F_SETLKW) {
- + break;
- + case F_SETLK:
- + case F_SETLKW:
- lck = (struct flock *)buf;
- while (this->flags & O_LOCK) {
- if (this->lockpid != curproc->pid) {
- @@ -806,8 +808,8 @@
- this->lockpid = curproc->pid;
- f->flags |= O_LOCK;
- }
- - }
- - else if (mode == F_GETLK) {
- + break;
- + case F_GETLK:
- lck = (struct flock *)buf;
- if (this->flags & O_LOCK) {
- lck->l_type = F_WRLCK;
- @@ -816,8 +818,9 @@
- }
- else
- lck->l_type = F_UNLCK;
- - }
- - else if (mode == TIOCFLUSH) {
- + break;
- + case TIOCFLUSH:
- + {
- long flushtype;
- long *which;
-
- @@ -835,7 +838,9 @@
- this->outp->head = this->outp->tail;
- wake(IO_Q, (long)this->outp);
- }
- - } else if (mode == TIOCOUTQ) {
- + break;
- + }
- + case TIOCOUTQ:
- p = (f->flags & O_HEAD) ? this->inp : this->outp;
- assert(p != 0);
- if (p->readers <= 0) {
- @@ -847,11 +852,20 @@
- r = r >> 2; /* r /= 4 */
- }
- *((long *) buf) = r;
- - } else if (mode == TIOCIBAUD || mode == TIOCOBAUD) {
- + break;
- + case TIOCIBAUD:
- + case TIOCOBAUD:
- *(long *)buf = -1L;
- - } else if (mode == TIOCGFLAGS) {
- + break;
- + case TIOCGFLAGS:
- *((unsigned short *)buf) = 0;
- - } else if (mode >= TCURSOFF && mode <= TCURSGRATE) {
- + break;
- + case TCURSOFF:
- + case TCURSON:
- + case TCURSSRATE:
- + case TCURSBLINK:
- + case TCURSSTEADY:
- + case TCURSGRATE:
- /* kludge: this assumes TOSWIN style escape sequences */
- tty_putchar(f, (long)'\033', RAW);
- switch (mode) {
- @@ -875,7 +889,8 @@
- case TCURSGRATE:
- return this->cursrate;
- }
- - } else {
- + break;
- + default:
- /* if the file is a terminal, Fcntl will automatically
- * call tty_ioctl for us to handle 'generic' terminal
- * functions
- diff -ur orig/signal.c ./signal.c
- --- orig/signal.c Wed Feb 9 23:10:02 1994
- +++ ./signal.c Thu Feb 17 20:36:14 1994
- @@ -129,7 +129,6 @@
- } else {
- ulong omask;
-
- - curproc->sigpending &= ~sigm;
- omask = curproc->sigmask;
-
- /* sigextra gives which extra signals should also be masked */
- diff -ur orig/syscall.spp ./syscall.spp
- --- orig/syscall.spp Fri Feb 11 19:23:02 1994
- +++ ./syscall.spp Thu Feb 17 22:11:32 1994
- @@ -139,7 +139,11 @@
- move.l 8(a1),-(sp)
- move.l 4(a1),-(sp)
- move.l (a1),-(sp)
- +%ifdef ONLY030
- + clr.w -(sp) ; flag: NOT GEMDOS
- +%else
- move.w #0,-(sp) ; flag: NOT GEMDOS
- +%endif
- jsr _enter_kernel ; set up vectors appropriately
- addq.w #2,sp
- bra _syscall
- @@ -166,7 +170,11 @@
- ;
- ; the shortcuts are also turned off if BIOSBUF=n
- ;
- +%ifdef ONLY030
- + clr.w -(sp) ; flag: NOT a GEMDOS call
- +%else
- move.w #0,-(sp) ; flag: NOT a GEMDOS call
- +%endif
- jsr _enter_kernel ; set up BIOS vectors
- addq.w #2,sp
- tst.w _bconbdev ; is BIOS buffering on?
- @@ -267,9 +275,13 @@
- check_max:
- cmp.w d5,d0
- bcc.s error
- +%ifdef ONLY030
- + move.l 0(a5,d0.w*4),d0 ; d0 = syscall_tab[d0]
- +%else
- add.w d0,d0
- add.w d0,d0 ; multiply by 4
- move.l 0(a5,d0.w),d0 ; d0 = syscall_tab[d0]
- +%endif
- beq.s error ; null entry means invalid call
- addq.w #2,sp ; pop function number off stack
- move.l d0,a0
- @@ -399,8 +411,7 @@
- ;
- XDEF _call_dosound
- _call_dosound:
- - move.l 4(sp),d0
- - move.l d0,-(sp)
- + move.l 4(sp),-(sp)
- move.w #32,-(sp)
- trap #14
- addq.w #6,sp
- diff -ur orig/tosfs.c ./tosfs.c
- --- orig/tosfs.c Wed Feb 2 20:36:50 1994
- +++ ./tosfs.c Thu Feb 17 20:43:22 1994
- @@ -1150,11 +1150,14 @@
- struct tindex *ti;
- extern int flk; /* set in main.c if _FLK already installed */
-
- - if (mode == FIONREAD || mode == FIONWRITE) {
- + switch (mode) {
- + case FIONREAD:
- + case FIONWRITE:
- *((long *)buf) = 1;
- return 0;
- - }
- - else if (mode == F_SETLK || mode == F_SETLKW || mode == F_GETLK) {
- + case F_SETLK:
- + case F_SETLKW:
- + case F_GETLK:
- fl = ((struct flock *)buf);
- t.l = *fl;
- switch(t.l.l_whence) {
- diff -ur orig/unifs.c ./unifs.c
- --- orig/unifs.c Fri Feb 11 19:28:04 1994
- +++ ./unifs.c Thu Feb 17 21:32:06 1994
- @@ -690,7 +702,10 @@
- extern struct kerinfo kernelinfo;
- extern FILESYS *active_fs;
-
- - if (cmd == FS_INSTALL) { /* install a new filesystem */
- + switch (cmd) {
- + case FS_INSTALL:
- + {
- + /* install a new filesystem */
- struct fs_descr *d = (struct fs_descr*)arg;
- FILESYS *fs;
-
- @@ -701,7 +704,10 @@
- d->file_system->next = active_fs;
- active_fs = d->file_system;
- return (long)&kernelinfo; /* return pointer to kernel info as OK */
- - } else if (cmd == FS_MOUNT) { /* install a new gemdos-only device for this FS */
- + }
- + case FS_MOUNT:
- + {
- + /* install a new gemdos-only device for this FS */
- struct fs_descr *d = (struct fs_descr*)arg;
- FILESYS *fs;
- UNIFILE *u;
- @@ -732,7 +738,10 @@
- u->next = u_root;
- u_root = u;
- return (long)u->dev;
- - } else if (cmd == FS_UNMOUNT) { /* remove a file system's directory */
- + }
- + case FS_UNMOUNT:
- + {
- + /* remove a file system's directory */
- struct fs_descr *d = (struct fs_descr*)arg;
- FILESYS *fs;
- UNIFILE *u;
- @@ -765,7 +774,10 @@
- u->mode &= ~S_IFMT;
- u->mode |= S_IFLNK;
- return uni_remove(dir, name);
- - } else if (cmd == FS_UNINSTALL) { /* remove file system from kernel list */
- + }
- + case FS_UNINSTALL:
- + {
- + /* remove file system from kernel list */
- struct fs_descr *d = (struct fs_descr*)arg;
- FILESYS *fs, *last_fs;
- UNIFILE *u;
- @@ -791,7 +803,8 @@
- fs = fs->next;
- }
- return EFILNF;
- - } else {
- + }
- + default:
- /* see if we should just pass this along to another file system */
- r = uni_lookup(dir, name, &fc);
- if (r == 0) {
- diff -ur orig/util.c ./util.c
- --- orig/util.c Wed Sep 15 02:44:12 1993
- +++ ./util.c Thu Feb 17 20:50:10 1994
- @@ -297,7 +297,7 @@
- * a Unix time (seconds from midnight Jan 1., 1970)
- */
-
- -static int
- +static int const
- mth_start[13] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
-
- long ARGS_ON_STACK
-